package com.wzdigit.wms.wms.mapper.inv.count;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wzdigit.framework.orm.mybatis.MyBatisRepository;
import com.wzdigit.wms.basic.domain.basic.Location;
import com.wzdigit.wms.basic.domain.basic.Sku;
import com.wzdigit.wms.basic.domain.basic.SkuCate;
import com.wzdigit.wms.basic.domain.basic.Zone;
import com.wzdigit.wms.basic.domain.inventory.Lotno;
import com.wzdigit.wms.wms.client.request.inv.count.CountHeaderRequest;
import com.wzdigit.wms.wms.client.response.inv.count.CountHeaderResponse;
import com.wzdigit.wms.wms.client.response.inv.count.ZoneLocDto;
import com.wzdigit.wms.wms.client.response.inv.count.dto.InvLocDto;
import com.wzdigit.wms.wms.domain.dto.inv.count.InvCountHeaderRequest;
import com.wzdigit.wms.wms.domain.dto.inv.count.InvCountHeaderResponse;
import com.wzdigit.wms.wms.domain.inv.count.InvCountHeader;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author 
 * @since 2021-10-08
 */
@MyBatisRepository
public interface InvCountHeaderMapper extends BaseMapper<InvCountHeader> {
    //盘点单头查询
    List<CountHeaderResponse> selcetCountHeaders(@Param("dto") CountHeaderRequest dto);

    //库区查询
    List<Zone> selectCoutnZones(@Param("whsId") Integer whsId,@Param("begin") Integer begin,
                                @Param("end") Integer end,@Param("emptyFlag") Boolean emptyFlag);


    //库位查询
    List<Location> selectCoutnLocs(@Param("zoneCodes") List<String> zoneCodes, @Param("begin") Integer begin,
                                   @Param("end") Integer end,@Param("emptyFlag") Boolean emptyFlag);

    //库位查询
    List<Location> selectCoutnLocsNew(@Param("zoneCodes") List<String> zoneCodes, @Param("begin") Integer begin,
                                   @Param("end") Integer end,@Param("emptyFlag") Boolean emptyFlag);

    //批次号查询
    List<Lotno> selectCoutnLotnos(@Param("whsId") Integer whsId,@Param("locCodes") List<String> locCodes, @Param("begin") Integer begin,
                                  @Param("end") Integer end, @Param("emptyFlag") Boolean emptyFlag,
                                  @Param("putFlag") Boolean putFlag);

    //批次号查询
    List<Lotno> selectCoutnLotnosNew(@Param("whsId") Integer whsId,@Param("locCodes") List<String> locCodes, @Param("begin") Integer begin,
                                  @Param("end") Integer end, @Param("emptyFlag") Boolean emptyFlag,
                                  @Param("putFlag") Boolean putFlag);

    //分类查询
    List<SkuCate> selectCoutnCates(@Param("whsId") Integer whsId,@Param("locCodes") List<String> locCodes,
                                   @Param("lotnos") List<String> lotnos, @Param("begin") Integer begin,
                                   @Param("end") Integer end, @Param("emptyFlag") Boolean emptyFlag,
                                   @Param("putFlag") Boolean putFlag);

    List<SkuCate> selectCoutnCatesNew(@Param("whsId") Integer whsId,@Param("locCodes") List<String> locCodes,
                                   @Param("lotnos") List<String> lotnos, @Param("begin") Integer begin,
                                   @Param("end") Integer end, @Param("emptyFlag") Boolean emptyFlag,
                                   @Param("putFlag") Boolean putFlag);


    //物料查询
    List<Sku> selectCoutnSku(@Param("whsId") Integer whsId,@Param("locCodes") List<String> locCodes, @Param("lotnos") List<String> lotnos,
                             @Param("cateCodes") List<String> cateCodes,@Param("begin") Integer begin,
                             @Param("end") Integer end, @Param("emptyFlag") Boolean emptyFlag,
                             @Param("putFlag") Boolean putFlag);

    List<Sku> selectCoutnSkuNew(@Param("whsId") Integer whsId,@Param("locCodes") List<String> locCodes, @Param("lotnos") List<String> lotnos,
                             @Param("cateCodes") List<String> cateCodes,@Param("begin") Integer begin,
                             @Param("end") Integer end, @Param("emptyFlag") Boolean emptyFlag,
                             @Param("putFlag") Boolean putFlag);

    /**PDA分页查询
        * @param headerRequest
        * @return java.util.List<com.wzdigit.wms.wms.domain.dto.inv.count.InvCountHeaderResponse>
        * @author shuaic
        * @date 2021/10/11 19:17
    */
    List<InvCountHeaderResponse> selectAll(@Param("headerRequest")InvCountHeaderRequest headerRequest,@Param("whsIdList")List<Integer> whsIdList
    ,@Param("statusList")List<Integer> statusList,@Param("loginName")String loginName);
    //库区库位映射
    List<ZoneLocDto> selectZoneLoc(@Param("locCodes") List<String> locCodes);

    //根据盘点范围查询库存信息【生成盘点任务】
    List<InvLocDto> selectLocByScope(@Param("locIds") List<Integer> locIds,
                                     @Param("lotnos") List<String> lotnos,
                                     @Param("skuIds") List<Integer> skuIds,
                                     @Param("whsId") Integer whsId,
                                     @Param("emptyFlag") Boolean emptyFlag,
                                     @Param("putFlag") Boolean putFlag,
                                     @Param("gruFlag") Boolean gruFlag);

    List<InvLocDto> selectLocByScopeNew(@Param("locIds") List<Integer> locIds,
                                     @Param("lotnos") List<String> lotnos,
                                     @Param("skuIds") List<Integer> skuIds,
                                     @Param("whsId") Integer whsId,
                                     @Param("emptyFlag") Boolean emptyFlag,
                                     @Param("putFlag") Boolean putFlag,
                                     @Param("gruFlag") Boolean gruFlag);

    //更新主档状态
    int updateHeaderStatus(@Param("loginName") String loginName, @Param("status") Integer status,
                           @Param("headerIds") List<BigDecimal> headerIds);

    //更新审核结果
    int updateHeaderAppr(@Param("loginName") String loginName, @Param("status") Integer status,
                         @Param("apprResult") Integer apprResult,@Param("headerIds") List<BigDecimal> headerIds);

    List<String> selectInvCountNoList(@Param("invCountNo") String invCountNo,@Param("statusList")List<Integer> statusList);

    //更新主档信息
    int updateHeaderInfo(@Param("header") InvCountHeader header);
}
